// JavaScript Document
//Variables y funciones GLOBALES

	var reqHandlerHistorico = null;
	var resultsHistorico;
	var movil = null;
	var historicoMovil = null;
	var contadorExcesos = 0;
	var contadorEventos = 0;
	/*ViewPoint*/
	var reqHandlerViewPoint = null;
	var resultsViewPoint;
	var movilViewPoint = null;

	var polyLinesHistorico = new Array(); //[polyline, es_direccional, inicio, fin, eventos, excesos]
	var markersHistorico = new Array(); //contiene las marcas generadas desde el reporte de historicos


/***********************PANTALLA PRINCIPAL*****************************/

	function mostrarFiltroHistorico() {
		hideDiv('div_resultadoHistorico');
		hideDiv('div_filtroHistoricoEventos');
		showDiv('div_filtroHistorico');
	}

	function historicoChangeColor(newColor){
		document.getElementById('colorText').color.hidePicker();
	}

	function addOptionsToCuentaHistoricoSelector(){
		var misVehiculosList = misVehiculosHash.values();
		if (misVehiculosList.length>0){
		   selector = document.getElementById('cuentaSelectHistorico');
		   selector.options.length=0; //remove all options
		   for (var i=0; i<misVehiculosList.length; i++){
			 if (misVehiculosList[i]!='toJSONString'){
				 newOption = document.createElement('option');
				 newOption.value = misVehiculosList[i].id;
				 movilTXT = misVehiculosList[i].marca+' '+misVehiculosList[i].modelo+' '+misVehiculosList[i].patente;
				 newOption.text = movilTXT;
				   try {
    					selector.add(newOption, null); // para todos los browsers (STANDART)
					   }
				  catch(ex) {
					    selector.add(newOption); // para IE
					   }
			 }
		   }
		   if ((cuentaSelectSegui!=null)&&(misVehiculosHash.containsKey(cuentaSelectSegui.toString()))){
			   selector.value = cuentaSelectSegui.toString();
		   }
		}
	}

	function addOptionsToCuentaHistoricoEventosSelector(){
		var misVehiculosList = misVehiculosHash.values();
		if (misVehiculosList.length>0){
		   selector = document.getElementById('cuentaSelectHistoricoEvento');
		   selector.options.length=0; //remove all options
		   for (var i=0; i<misVehiculosList.length; i++){
			 if (misVehiculosList[i]!='toJSONString'){
				 newOption = document.createElement('option');
				 newOption.value = misVehiculosList[i].id;
				 movilTXT = misVehiculosList[i].marca+' '+misVehiculosList[i].modelo+' '+misVehiculosList[i].patente;
				 newOption.text = movilTXT;
				   try {
    					selector.add(newOption, null); // para todos los browsers (STANDART)
					   }
				  catch(ex) {
					    selector.add(newOption); // para IE
					   }
			 }
		   }
		   if ((cuentaSelectSegui!=null)&&(misVehiculosHash.containsKey(cuentaSelectSegui.toString()))){
			   selector.value = cuentaSelectSegui.toString();
		   }
		}
	}

	function CargarHistorico(){
		addOptionsToCuentaHistoricoSelector();
	}


/**************************VISUALIZACION DE MARKERS EN GMAP**************************/

	function createSimpleMarker(point, icon, simpleTabs) {
  		var simpleMarker = new GMarker(point, {icon: icon, draggable:false});
  		if ((simpleTabs!=null)&&(simpleTabs.length > 0)) {
  			GEvent.addListener(simpleMarker, "click", function() {
    		simpleMarker.openInfoWindowTabsHtml(simpleTabs);
  			});
  		}
  		return simpleMarker;
	}

	function getMessageMarker(texto, posiMovilReduce) {
    	htmlTab0 = '<table width="350" border="0"><tr><td><span class="resaltado">' + movil.identificador + '</span></td></tr>';
    	htmlTab0 += '<tr><td align="left"><span class="inputLBL">Patente: </span><span class="inputTEXT">' +  movil.patente + '</span></td></tr>';
    	htmlTab0 += '<tr><td align="left"><hr></td></tr>';
    	htmlTab0 += '<tr><td align="left"><span class="inputLBL">' + historicoMovil.nombreFiltro + '</span><span class="inputTEXT"></td></tr>';
        htmlTab0 += '<tr><td align="left"><span class="inputLBL">Velocidad promedio: </span><span class="inputTEXT">' +  historicoMovil.velocidadPromedio + '</span></td></tr>';
        htmlTab0 += '<tr><td align="left"><span class="inputLBL">Velocidad m&aacute;xima: </span><span class="inputTEXT">' +  historicoMovil.velocidadMaxima + '</span></td></tr>';
        htmlTab0 += '<tr><td align="left"><span class="inputLBL">Distancia recorrida: </span><span class="inputTEXT">' +  historicoMovil.distanciaRecorrida + '</span></td></tr>';
        htmlTab0 += '<tr><td align="left"><hr></td></tr>';
    	htmlTab0 += '<tr><td align="left" aling="center"><span class="inputLBL">' + texto + '</span></td></tr>';
		htmlTab0 += '<tr><td align="left"><span class="inputLBL">Fecha Mensaje: </span></span><span class="inputTEXT">' + posiMovilReduce.fechaMensaje + '</span></td></tr>'
	    htmlTab0 += '</table>';

		htmlTab1 = '<table width="350" border="0>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';
    	htmlTab1 += '<tr><td align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + posiMovilReduce.evento + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="linked">Zona Prohibida: ' + posiMovilReduce.zonaProhibida + '</span></td></tr>';
		htmlTab1 += '</table>';

		var tabs = new Array();
		tabs.push (new GInfoWindowTab("Historico",htmlTab0));
		tabs.push (new GInfoWindowTab("Posicion",htmlTab1));
    	return tabs;
    }

    function getMessageMarkerViewPoint(texto, posiMovilReduce, invalido, exceso, evento, fuerazona) {
    	htmlTab0 = '<table border="0" width="350">';
		htmlTab0 += '<tr><td><span class="resaltado">' + movilViewPoint.identificador + '</span></td><td align="right">';
		htmlTab0 += '<table border=0 cellpadding="0" cellspacing="0"><tr>';
		htmlTab0 += '<td width="16">';
		if (invalido)
			htmlTab0 += '<img src="images/alertaIcon.gif" border="0" >';
		htmlTab0 += '</td>';
		htmlTab0 += '<td width="16">';
		if (exceso)
			htmlTab0 += '<img src="images/excesoIcon.gif" border="0" >';
		htmlTab0 += '</td>';
		htmlTab0 += '<td width="16">';
		if (evento)
			htmlTab0 += '<img src="images/eventoIcon.gif" border="0" >';
		htmlTab0 += '</td>';
		htmlTab0 += '<td width="16">';
		if (fuerazona)
			htmlTab0 += '<img src="images/zonaprohibidaIcon.gif" border="0" >';
		htmlTab0 += '</td>';
		htmlTab0 += '</tr></table></td></tr>';
    	htmlTab0 += '<tr><td colspan="2" align="left"><span class="inputLBL">Patente: </span><span class="inputTEXT">' +  movilViewPoint.patente + '</span></td></tr>';
    	htmlTab0 += '<tr><td colspan="2" align="left"><hr></td></tr>';
		if ((posiMovilReduce.codigoAlfa=='TST')||(posiMovilReduce.codigoAlfa=='')||(posiMovilReduce.codigoAlfa==null))
			texto = 'No reconocido';
		else
			texto = posiMovilReduce.codigoAlfaName	;

    	htmlTab0 += '<tr><td colspan="2" align="left" aling="center"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + texto + '</span></td></tr>';
		htmlTab0 += '<tr><td colspan="2" align="left"><span class="inputLBL">Fecha Mensaje: </span><span class="inputTEXT">' + posiMovilReduce.fechaMensaje + '</span></td></tr>'
		htmlTab0 += '</table>';

	    htmlTab1 = '<table  border="0" width="350">';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Direcci&oacute;n: </span><span class="inputTEXT">' + posiMovilReduce.direccionAbrev + '</span></td></tr>';
    	htmlTab1 += '<tr><td align="left"><span class="inputLBL">Latitud: </span><span class="inputTEXT">' + posiMovilReduce.latitud + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Longitud: </span><span class="inputTEXT">' + posiMovilReduce.longitud + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Sat&eacute;lites: </span><span class="inputTEXT">' + posiMovilReduce.satelites + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Sentido: </span><span class="inputTEXT">' + posiMovilReduce.sentidoPalabra + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Velocidad: </span><span class="inputTEXT">' + posiMovilReduce.velocidad + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="inputLBL">Evento: </span><span class="inputTEXT">' + posiMovilReduce.evento + '</span></td></tr>';
		htmlTab1 += '<tr><td align="left"><span class="linked">Zona Prohibida: ' + posiMovilReduce.zonaProhibida + '</span></td></tr>';
		htmlTab1 += '</table>';

		var tabs = new Array();
		tabs.push (new GInfoWindowTab("Evento",htmlTab0));
		tabs.push (new GInfoWindowTab("Posicion",htmlTab1));
    	return tabs;
    }

	function putIconExceso(posiMovilReduce) {
		iconOptions = {};
		iconOptions.primaryColor = "#FF00FA";
		iconOptions.strokeColor = "#000000";
		iconOptions.label = "ex";
		iconOptions.labelColor = "#000000";
		icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
		point = new GLatLng(posiMovilReduce.latitud , posiMovilReduce.longitud);
		tabs = getMessageMarkerViewPoint("Exceso de velocidad: " + posiMovilReduce.velocidad + " km", posiMovilReduce, false, true, false, false);
		marker = createSimpleMarker(point, icon, tabs);
		lastIndex = polyLinesHistorico.length - 1;
		if (lastIndex>=0)
			polyLinesHistorico[lastIndex].excesos.push(marker);
		map.addOverlay(marker);
		return marker;
	}

	function putIconEvento(posiMovilReduce) {
		iconOptions = {};
		iconOptions.primaryColor = "#ABFAFA";
		iconOptions.strokeColor = "#000000";
		iconOptions.label = "ev";
		iconOptions.labelColor = "#000000";
		icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
		point = new GLatLng(posiMovilReduce.latitud , posiMovilReduce.longitud);
		tabs = getMessageMarkerViewPoint("Evento: " + posiMovilReduce.codigoAlfaName, posiMovilReduce, false, false, true, false);
		marker = createSimpleMarker(point, icon, tabs);
		lastIndex = polyLinesHistorico.length - 1;
		if (lastIndex>=0)
			polyLinesHistorico[lastIndex].eventos.push(marker);
		map.addOverlay(marker);
		return (marker);
	}


	function putIconInicio(posiMovilReduce)
	{
		iconOptions = {};
		iconOptions.primaryColor = "#"+COLOR_DEFAULT_RECORRIDO_INI;
		iconOptions.strokeColor = "#000000";
		iconOptions.label = "I";
		iconOptions.labelColor = "#000000";
		icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
		point = new GLatLng(posiMovilReduce.latitud , posiMovilReduce.longitud);
		tabs = getMessageMarker("Inicio de recorrido", posiMovilReduce);
		marker = createSimpleMarker(point, icon, tabs);
		map.addOverlay(marker);
		return (marker);
	}

	function putIconFin(posiMovilReduce)
	{
		iconOptions = {};
		iconOptions.primaryColor = "#"+COLOR_DEFAULT_RECORRIDO_FIN;
		iconOptions.strokeColor = "#000000";
		iconOptions.label = "F";
		iconOptions.labelColor = "#000000";
		icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
		point = new GLatLng(posiMovilReduce.latitud , posiMovilReduce.longitud);
		tabs = getMessageMarker("Fin de recorrido", posiMovilReduce);
		marker = createSimpleMarker(point, icon, tabs);
		map.addOverlay(marker);
		return (marker);
	}

	function putIconSelection(posiMovilReduce, invalido, exceso, evento, fuerazona)
	{
		var iconOptions = {};
		iconOptions.primaryColor = "#0000FF";
		iconOptions.strokeColor = "#000000";
		iconOptions.label = "S";
		iconOptions.labelColor = "#FFFFFF";
		var icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
		var point = new GLatLng(posiMovilReduce.latitud , posiMovilReduce.longitud);
		tabs = getMessageMarkerViewPoint('', posiMovilReduce, invalido, exceso, evento, fuerazona);
		marker = createSimpleMarker(point, icon, tabs);
		markersHistorico.push(marker);
		map.addOverlay(marker);
		return (marker);
	}

/**************************FUNCIONALIDAD IMPRIMIR RECORRIDO HISTORICO**********************/

    function loadInfoHistorico() {
		document.getElementById("historico_movil").innerHTML =  movil.identificador;
		document.getElementById("historico_filtro").innerHTML = historicoMovil.nombreFiltro;
		document.getElementById("historico_velPromedio").innerHTML = historicoMovil.velocidadPromedio + " Km/h";
		document.getElementById("historico_velMaxima").innerHTML = historicoMovil.velocidadMaxima + " Km/h";
		document.getElementById("historico_distanciaRecorrida").innerHTML = historicoMovil.distanciaRecorrida + " Km";
	}

	function mostrarDataHistorico() {
		loadInfoHistorico();
		if (contadorExcesos == 0) {
			hideDiv('div_excesosHistorico');
		} else {
			showDiv('div_excesosHistorico');
		}
		if (contadorEventos == 0) {
			hideDiv('div_eventosHistorico');
		} else {
			showDiv('div_eventosHistorico');
		}
		hideDiv('div_filtroHistorico');
		showDiv('div_resultadoHistorico');
	}

	function initExcesos() {
		return '<div><hr><span class="sectionTITLE">Excesos (' + contadorExcesos + ') : </span><br><div  style="overflow:auto; top: 48px; height:100px; width:265px;"><table width="245" cellspace="0" cellpadding="0"><tr><td align="center"><span class="inputLBL">Fecha</span></td><td align="center"><span class="inputLBL">Velocidad</span></td><td align="center">&nbsp;</td></tr>';
	}

	function initEventos() {
		return '<div><hr><span class="sectionTITLE">Eventos (' + contadorEventos + ') : </span><br><div style="overflow:auto; top:48px; height:100px; width:265px;"><table width="245"><tr><td align="center"><span class="inputLBL">Fecha</span></td><td align="center"><span class="inputLBL">Evento</span></td><td align="center">&nbsp;</td></tr>';
	}

	function finExcesos() {
		return '</table></div></div>';
	}

	function finEventos() {
		return '</table></div></div>';
	}

    function procesarExceso(posiMovilReduce) {
		var velocidadIndicada = document.getElementById('excesoVelocidad').value;
		if (velocidadIndicada != '' && eval(velocidadIndicada) <= eval(posiMovilReduce.velocidad)) {
			contadorExcesos++;
			if (eval(posiMovilReduce.edadMensaje) < 255) {
				return "<tr class='trStyle'><td align='center'><span class='inputTEXT'>" + posiMovilReduce.fechaMensaje + "</span></td><td align='center'><span class='inputTEXT'>" + posiMovilReduce.velocidad + "</span></td><td align='center'><a href=javascript:ViewInMapExceso('" + document.getElementById('cuentaSelectHistorico').value +"','" + posiMovilReduce.id + "','historico_avl_" + posiMovilReduce.fechaRecibido.substring(2,4) + posiMovilReduce.fechaRecibido.substring(5,7)  + "'); class='link'> <img title='ver en mapa' src='images/viewinmapIcon.gif' border='0' width='16' height='10'></a></td></tr>";
			} else {
				return "<tr class='trStyle'><td align='center'><span class='inputTEXT'>" + posiMovilReduce.fechaMensaje + "</span><img src='images/datoInvalido.gif' title='Posici&oacute;n no v&aacute;lida'></td><td align='center'><span class='inputTEXT'>" + posiMovilReduce.velocidad + "</span></td><td align='center'><a href=javascript:ViewInMapExceso('" + document.getElementById('cuentaSelectHistorico').value +"','" + posiMovilReduce.id + "','historico_avl_" + posiMovilReduce.fechaRecibido.substring(2,4) + posiMovilReduce.fechaRecibido.substring(5,7)  + "'); class='link'> <img title='ver en mapa' src='images/viewinmapIcon.gif' border='0' width='16' height='10'></a></td></tr>";
			}

		}
		return "";
	}

	function procesarEvento(posiMovilReduce) {
		if (posiMovilReduce.soloLogistica == false) {
			contadorEventos++;
			eventoName = 'No reconocido';
			if (posiMovilReduce.codigoAlfa!=null)
				eventoName = posiMovilReduce.codigoAlfa;
			if (eval(posiMovilReduce.edadMensaje) < 255) {
				return "<tr class='trStyle'><td align='left'><span class='inputTEXT'>" + posiMovilReduce.fechaMensaje + "</span></td><td align='center'><span class='inputTEXT'>" + eventoName + "</span></td><td align='center'><a href=javascript:ViewInMapEvento('" + document.getElementById('cuentaSelectHistorico').value +"','" + posiMovilReduce.id + "','historico_avl_" + posiMovilReduce.fechaRecibido.substring(2,4) + posiMovilReduce.fechaRecibido.substring(5,7)  + "'); class='link'> <img title='ver en mapa' src='images/viewinmapIcon.gif' border='0' width='16' height='10'></a></td></tr>"
			} else {
				return "<tr class='trStyle'><td align='left'><span class='inputTEXT'>" + posiMovilReduce.fechaMensaje + "</span><img src='images/datoInvalido.gif' title='Posici&oacute;n no v&aacute;lida'></td><td align='center'><span class='inputTEXT'>" + eventoName + "</span></td><td align='center'><a href=javascript:ViewInMapEvento('" + document.getElementById('cuentaSelectHistorico').value +"','" + posiMovilReduce.id + "','historico_avl_" + posiMovilReduce.fechaRecibido.substring(2,4) + posiMovilReduce.fechaRecibido.substring(5,7)  + "'); class='link'> <img title='ver en mapa' src='images/viewinmapIcon.gif' border='0' width='16' height='10'></a></td></tr>"
			}
		}

		return "";

	}

	function new_historicoElement(){ //crea un nuevo elemento vacio que pertenece al array 'polyLinesHistorico'
		element = new Array();
		element['polyline']=null;
		element['es_direccional']=false;
		element['inicio']=null;
		element['fin']=null;
		element['eventos']=new Array();
		element['excesos']=new Array();
		return element;
	}

	function condicionLinea(primerPunto, segundoPunto) {
		if (eval(segundoPunto.edadMensaje) >= 255) return false;
		if (segundoPunto.codigoAlfa != 'TST') return true;
		var distancia = Math.sqrt(Math.pow(eval(primerPunto.latitud) - eval(segundoPunto.latitud),2) + Math.pow(eval(primerPunto.longitud) - eval(segundoPunto.longitud),2));
		distancia = distancia * 1000;
		if (distancia < 0.5) {
			return false;
		}
		return true;
	}



	var contadorKm=0;
	function condicionSentido(P1, P2, init) {
		if (condicionLinea(P1, P2)){
			if (init){
			//inicializar variables globales
			 	contadorKm=0;
			}

			velocidadAux = P1.velocidad;

			//distancias
			dx = P2.latitud-P1.latitud;
		    dy = P2.longitud-P1.longitud;
			contadorKm = contadorKm + Math.sqrt((dx*dx)+(dy*dy))*100; //distancia en Km

			//verificar sentido
			anguloSegmento = Math.atan2(-dy,dx);
			if (Math.abs(P1.sentido-P2.sentido)>45){
				contadorKm = 0;
			    return true;
				}
			if (contadorKm > 20){
				contadorKm = 0;
				return true;
				}

		}
		return false;
	}

    function clearHistorico(index) {
		if (index==null){
			index=polyLinesHistorico.length;
			if (index>0) index--;
			}
		if ((polyLinesHistorico[index]!=null)&&(polyLinesHistorico[index]!='undefined')){
		    //remuevo la polilinea
			if (polyLinesHistorico[index].es_direccional)
				polyLinesHistorico[index].polyline.clear();
			else
				map.removeOverlay(polyLinesHistorico[index].polyline);
			//remuevo las marcas de inicio y fin
			if (polyLinesHistorico[index].inicio!=null) map.removeOverlay(polyLinesHistorico[index].inicio);
			if (polyLinesHistorico[index].fin!=null) map.removeOverlay(polyLinesHistorico[index].fin);
			//remuevo las marcas de eventos
			for (i=0; i<polyLinesHistorico[index].eventos.length; i++)
				map.removeOverlay(polyLinesHistorico[index].eventos[i]);
			//remuevo las marcas de excesos
			for (i=0; i<polyLinesHistorico[index].excesos.length; i++)
				map.removeOverlay(polyLinesHistorico[index].excesos[i]);
			//elimino el elemento del array
			polyLinesHistorico.splice(index,1);
		}
    }

	 function clearHistoricos() {
	 	for (i=0; i<markersHistorico.length; i++)
		    map.removeOverlay(markersHistorico[i]);
		markersHistorico.length=0;
	 	largo = polyLinesHistorico.length;
		for (i=0; i<largo; i++)
			clearHistorico(0);
    }

	/*CallBacks*/
    function OnReadyStateChangeHistorico() {
    	var ready = reqHandlerHistorico.readyState;
		if (ready == READY_STATE_COMPLETE) {
			resultsHistorico = reqHandlerHistorico.responseText.parseJSON();
			if (resultsHistorico.length != 'undefined') {
				movil = resultsHistorico[0];
				historicoMovil = resultsHistorico[1];
				if (resultsHistorico.length > 2) {
					historicoElement = new_historicoElement();
				    puntos = new Array();
					initSentido = true;
					puntosSentido = new Array();
					puntosIndex = 0;
					puntosSentidoIndex = 0;
					contadorExcesos = 0;
					contadorEventos = 0;
					var htmlEventos = "";
					var htmlExcesos = "";
					var color = '#'+document.getElementById('colorId').value;
					var ancho = document.getElementById('thickness').value;
					var verSentido = document.getElementById('verSentido').checked;
					historicoElement['inicio']=putIconInicio(resultsHistorico[2]);
					historicoElement['fin']=putIconFin(resultsHistorico[resultsHistorico.length - 1]);
					primerPunto = resultsHistorico[2];
					primerPuntoSentido = resultsHistorico[2];
					puntos[puntosIndex]=new GLatLng(primerPunto.latitud,  primerPunto.longitud);
					for (var i = 2; i < resultsHistorico.length - 1; i++) {
						htmlExcesos += procesarExceso(resultsHistorico[i]);
						htmlEventos += procesarEvento(resultsHistorico[i]);
						segundoPunto = resultsHistorico[i+1];
						segundoPuntoSentido = resultsHistorico[i+1];
						if (condicionLinea(primerPunto, segundoPunto) || segundoPunto == resultsHistorico[resultsHistorico.length - 1]) {
							puntosIndex++;
							puntos[puntosIndex]=new GLatLng(parseFloat(segundoPunto.latitud), parseFloat(segundoPunto.longitud));
							primerPunto = segundoPunto;
						}

						if (condicionSentido(primerPuntoSentido, segundoPuntoSentido, initSentido)){
							puntosSentido[puntosSentidoIndex]=new GLatLng(resultsHistorico[i].latitud,  resultsHistorico[i].longitud);
							puntosSentidoIndex++;
							puntosSentido[puntosSentidoIndex]=new GLatLng(segundoPuntoSentido.latitud,  segundoPuntoSentido.longitud);
							puntosSentidoIndex++;
							primerPuntoSentido = segundoPuntoSentido;
						}
						initSentido = false;

					}
					//polyline graphic sector
					polylineEncoder = new PolylineEncoder();
					if (verSentido){
						polyline = polylineEncoder.dpEncodeToGPolyline(puntos,color,ancho,0.5,puntosSentido);
						historicoElement["es_direccional"]=true;
						centrarEnPuntos(puntos);
						}
					else{
						polyline = polylineEncoder.dpEncodeToGPolyline(puntos,color,ancho,0.5);
						historicoElement["es_direccional"]=false;
						centrarEnPoly(polyline);
						}
					historicoElement["polyline"]=polyline;
					polyLinesHistorico.push(historicoElement);
					map.addOverlay(polyline);

					htmlExcesos = initExcesos() + htmlExcesos + finExcesos();
					htmlEventos = initEventos() + htmlEventos + finEventos();
					document.getElementById('div_excesosHistorico').innerHTML = htmlExcesos;
					document.getElementById('div_eventosHistorico').innerHTML = htmlEventos;
					mostrarDataHistorico();

				} else {
					alert('No hubo resultados para la busqueda realizada.');
				}
			} else {
				alert('Ocurrio un problema al realizar la busqueda.');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
			reqHandlerHistorico = null;
		}
    }

	function SubmitHistorico() {
		dateIni = document.getElementById('mesi').value;
		dateIni += "/" + document.getElementById('diai').value;
		dateIni += "/" + document.getElementById('anoi').value;
		dateIni += " " + document.getElementById('horaInicio').value;
		dateFin = document.getElementById('mesf').value;
		dateFin += "/" + document.getElementById('diaf').value;
		dateFin += "/" + document.getElementById('anof').value;
		dateFin += " " + document.getElementById('horaFin').value;
		var DateDde = new Date(dateIni);
		var DateHta = new Date(dateFin);
		var time1 = DateDde.getTime();
		var time2 = DateHta.getTime();
		var difHour = (time2 - time1)/Date.HOUR;
	    if (difHour < 24){
	    	var reqParamsHistorico = "COMMAND=HISTORICO";
	    	reqParamsHistorico += "&CUENTA=" + document.getElementById('cuentaSelectHistorico').value;
	    	reqParamsHistorico += "&diai=" + document.getElementById('diai').value;
	    	reqParamsHistorico += "&mesi=" + document.getElementById('mesi').value;
	    	reqParamsHistorico += "&anoi=" + document.getElementById('anoi').value;
	    	reqParamsHistorico += "&diaf=" + document.getElementById('diaf').value;
	    	reqParamsHistorico += "&mesf=" + document.getElementById('mesf').value;
	    	reqParamsHistorico += "&anof=" + document.getElementById('anof').value;
	    	reqParamsHistorico += "&horaInicio=" + document.getElementById('horaInicio').value;
	    	reqParamsHistorico += "&horaFin=" + document.getElementById('horaFin').value;
	    	autoRefreshFlag = 1;
	    	document.getElementById("busyImg").style.visibility = "visible";
	    	if (msie)
	            reqHandlerHistorico = new ActiveXObject("Microsoft.XMLHTTP");
	        else
	            reqHandlerHistorico = new XMLHttpRequest();
	        reqHandlerHistorico.onreadystatechange = OnReadyStateChangeHistorico;
	        reqHandlerHistorico.open("POST", "querycontroller.php", true);
	        reqHandlerHistorico.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerHistorico.send(reqParamsHistorico);
			}
		else{
		    alert("Este reporte no puede realizarse para un rango de tiempos que superen las 24 horas");
			}
    }

/*************************FUNCIONALIDAD GENERAR REPORTE DE HISTORICOS***************************/
    function Verificar() {
    	return true;
    }

    function SubmitHistoricoReporte() {
	    if (Verificar()){
			var str = document.getElementById('colorId').value;
			str = str.substring(1);
			URL = "task_paneReporteGMap.php?cuentaSelect=" + document.getElementById('cuentaSelectHistorico').value
			    + "&anoi=" + document.getElementById('anoi').value
			    + "&mesi="  + document.getElementById('mesi').value
			    + "&diai="  + document.getElementById('diai').value
			    + "&horaInicio="  + document.getElementById('horaInicio').value
			    + "&anof=" + document.getElementById('anof').value
			    + "&mesf="  + document.getElementById('mesf').value
			    + "&diaf="  + document.getElementById('diaf').value
			    + "&horaFin="  + document.getElementById('horaFin').value
			    + "&colorId="  + str
			    + "&thickness="  + document.getElementById('thickness').value
			    + "&excesoVelocidad=" + document.getElementById('excesoVelocidad').value
			    + "&filtrarCeros=" + document.getElementById('filtrarCeros').value
			    + "&pag=1"
			    + "&SESSION=''";//?v="+cuenta+"&codigocuenta="+codigocuenta+"&nom1nom2="+nom1nom2+"&identificadorPatente="+identificadorPatente;
			ancho=780;
	  		alto = 530;
	
	  		scrollbars = 'no';
	  		resize = 'no';
			day = new Date();
			id = day.getTime();
	 		eval("page" + id + " = window.open(URL, '" + id + "', 'width=" + ancho + ",height=" + alto + ",menubar=NO,Status=NO,titlebar=NO,toolbar=NO,top=100,left=200,scrollbars=" + scrollbars + ",resizable=" + resize + "');");
		}
    }



/**************CALLBACKS************/
	var tempInvalido=0;
	var tempExceso=0;
	var tempEvento=0;
	var tempFuerazona=0;
    function OnReadyStateChangeViewInMap() {
    	var ready = reqHandlerViewPoint.readyState;
		if (ready == READY_STATE_COMPLETE) {
			resultsViewPoint = reqHandlerViewPoint.responseText.parseJSON();
			if (resultsViewPoint.length != 'undefined') {
				movilViewPoint = resultsViewPoint[0];
				if (resultsViewPoint.length > 1) {
					putIconSelection(resultsViewPoint[1], tempInvalido, tempExceso, tempEvento, tempFuerazona);
					centrar(resultsViewPoint[1].latitud, resultsViewPoint[1].longitud);
				} else {
					alert('No se encontro el punto seleccionado.');
				}
			} else {
				alert('Ocurrio un problema al realizar la busqueda.');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
			reqHandlerViewPoint = null;
		}
    }

    function OnReadyStateChangeViewInMapEvento() {
		var ready = reqHandlerViewPoint.readyState;
		if (ready == READY_STATE_COMPLETE) {
			resultsViewPoint = reqHandlerViewPoint.responseText.parseJSON();
			if (resultsViewPoint.length != 'undefined') {
				movilViewPoint = resultsViewPoint[0];
				if (resultsViewPoint.length > 1) {
					putIconEvento(resultsViewPoint[1]);
					centrar(resultsViewPoint[1].latitud, resultsViewPoint[1].longitud);
				} else {
					alert('No se encontro el punto seleccionado.');
				}
			} else {
				alert('Ocurrio un problema al realizar la busqueda.');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
			reqHandlerViewPoint = null;
		}
	}

	function OnReadyStateChangeViewInMapExceso() {
		var ready = reqHandlerViewPoint.readyState;
		if (ready == READY_STATE_COMPLETE) {
			resultsViewPoint = reqHandlerViewPoint.responseText.parseJSON();
			if (resultsViewPoint.length != 'undefined') {
				movilViewPoint = resultsViewPoint[0];
				if (resultsViewPoint.length > 1) {
					putIconExceso(resultsViewPoint[1]);
					centrar(resultsViewPoint[1].latitud, resultsViewPoint[1].longitud);
				} else {
					alert('No se encontro el punto seleccionado.');
				}
			} else {
				alert('Ocurrio un problema al realizar la busqueda.');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
			reqHandlerViewPoint = null;
		}
	}

	/******************************************/

    function ViewInMap(cuenta, historicoId, tabla, invalido, exceso, evento, fuerazona, texto) {
    	var reqParamsViewPoint = "COMMAND=VIEWPOINT";
    	reqParamsViewPoint += "&CUENTA=" + cuenta;
    	reqParamsViewPoint += "&HISTORICOID=" + historicoId;
    	reqParamsViewPoint += "&SEARCHALFA=1";
    	reqParamsViewPoint += "&TABLA=" + tabla;
    	autoRefreshFlag = 1;
    	document.getElementById("busyImg").style.visibility = "visible";
    	if (msie)
            reqHandlerViewPoint = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerViewPoint = new XMLHttpRequest();
		tempInvalido=invalido;
		tempExceso=exceso;
		tempEvento=evento;
		tempFuerazona=fuerazona;
		tempTexto=texto;
        reqHandlerViewPoint.onreadystatechange = OnReadyStateChangeViewInMap;
        reqHandlerViewPoint.open("POST", "querycontroller.php", true);
        reqHandlerViewPoint.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerViewPoint.send(reqParamsViewPoint);
    }

    function ViewInMapEvento(cuenta, historicoId, tabla) {
    	var reqParamsViewPoint = "COMMAND=VIEWPOINT";
    	reqParamsViewPoint += "&CUENTA=" + cuenta;
    	reqParamsViewPoint += "&HISTORICOID=" + historicoId;
    	reqParamsViewPoint += "&SEARCHALFA=1";
    	reqParamsViewPoint += "&TABLA=" + tabla;
    	autoRefreshFlag = 1;
    	document.getElementById("busyImg").style.visibility = "visible";
    	if (msie)
            reqHandlerViewPoint = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerViewPoint = new XMLHttpRequest();

        reqHandlerViewPoint.onreadystatechange = OnReadyStateChangeViewInMapEvento;
        reqHandlerViewPoint.open("POST", "querycontroller.php", true);
        reqHandlerViewPoint.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerViewPoint.send(reqParamsViewPoint);
    }

    function ViewInMapExceso(cuenta, historicoId, tabla) {
    	var reqParamsViewPoint = "COMMAND=VIEWPOINT";
    	reqParamsViewPoint += "&CUENTA=" + cuenta;
    	reqParamsViewPoint += "&HISTORICOID=" + historicoId;
    	reqParamsViewPoint += "&SEARCHALFA=0";
    	reqParamsViewPoint += "&TABLA=" + tabla;
    	autoRefreshFlag = 1;
    	document.getElementById("busyImg").style.visibility = "visible";
    	if (msie)
            reqHandlerViewPoint = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerViewPoint = new XMLHttpRequest();

        reqHandlerViewPoint.onreadystatechange = OnReadyStateChangeViewInMapExceso;
        reqHandlerViewPoint.open("POST", "querycontroller.php", true);
        reqHandlerViewPoint.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerViewPoint.send(reqParamsViewPoint);
    }

/*****************************************************REPORTE HISTORICO DE EVENTOS***********************************************/
	function mostrarFiltroHistoricoEventos(){
		hideDiv('div_filtroHistorico');
		addOptionsToCuentaHistoricoEventosSelector();
		showDiv('div_filtroHistoricoEventos');
	}

	function VerificarHistoricoEventosReporte() {
    	return true;
    }

    function SubmitHistoricoEventosReporte() {
    if (VerificarHistoricoEventosReporte())
		{
		URL = "reports/historicoEventosRPT.php?movil=" + document.getElementById('cuentaSelectHistoricoEvento').value
		    + "&anoi=" + document.getElementById('anoiHistoricoEventos').value
		    + "&mesi="  + document.getElementById('mesiHistoricoEventos').value
		    + "&diai="  + document.getElementById('diaiHistoricoEventos').value
		    + "&horaInicio="  + document.getElementById('horaInicioHistoricoEventos').value
		    + "&anof=" + document.getElementById('anofHistoricoEventos').value
		    + "&mesf="  + document.getElementById('mesfHistoricoEventos').value
		    + "&diaf="  + document.getElementById('diafHistoricoEventos').value
		    + "&horaFin="  + document.getElementById('horaFinHistoricoEventos').value
			+ "&process="  + document.getElementById('estadoHistoricoEventos').value;

		ancho=780;
  		alto = 530;

  		scrollbars = 'no';
  		resize = 'no';
		day = new Date();
		id = day.getTime();
 		eval("page" + id + " = window.open(URL, '" + id + "', 'width=" + ancho + ",height=" + alto + ",menubar=NO,Status=NO,titlebar=NO,toolbar=NO,top=100,left=200,scrollbars=" + scrollbars + ",resizable=" + resize + "');");
		}
    }
